262  /  381
Справочник

Пользовательские ограничения

Просмотров: 48040
Дата последнего изменения: 13.11.2023
Татьяна Старкова
Сложность урока:
4 уровень - сложно, требуется сосредоточиться, внимание деталям и точному следованию инструкции.
1
2
3
4
5
Недоступно в лицензиях:
Старт, Стандарт

С переходом магазина на новую схему работы было введено понятие ограничений. Ограничения можно добавлять для служб доставок, платежных систем, касс и компаний (для компаний ограничения являются правилами).

Таким образом, например, службу доставки можно настроить так, что она будет работать только для некоторого местоположения, только для заказов такой-то стоимости,веса или выбрать другие ограничения из стандартных ограничений.

Вы можете дополнить стандартный набор ограничений своими собственными ограничениями. Для этого следует в зависимости от ваших нужд использовать события инициализации ограничений:

  • для служб доставок onSaleDeliveryRestrictionsClassNamesBuildList:
    Bitrix\Main\EventManager::getInstance()->addEventHandler(
    	'sale',
    	'onSaleDeliveryRestrictionsClassNamesBuildList',
    	'myDeliveryFunction'
    );
    
  • для платежных систем onSalePaySystemRestrictionsClassNamesBuildList:
    Bitrix\Main\EventManager::getInstance()->addEventHandler(
    	'sale',
    	'onSalePaySystemRestrictionsClassNamesBuildList',
    	'myPayFunction'
    );
    
  • для касс onSaleCashboxRestrictionsClassNamesBuildList:
    Bitrix\Main\EventManager::getInstance()->addEventHandler(
    	'sale',
    	'onSaleCashboxRestrictionsClassNamesBuildList',
    	'myCashboxFunction'
    );
    
  • для компаний onSaleCompanyRulesClassNamesBuildList:
    Bitrix\Main\EventManager::getInstance()->addEventHandler(
    	'sale',
    	'onSaleCompanyRulesClassNamesBuildList',
    	'myCompanyFunction'
    );
    

В обработчиках событий соответственно следует возвращать ваш класс ограничений:

  • для служб доставок:
    function myDeliveryFunction()
    {
    	return new \Bitrix\Main\EventResult(
    		\Bitrix\Main\EventResult::SUCCESS,
    		array(
    			'\MyDeliveryRestriction' => '/bitrix/php_interface/include/mydelrestriction.php',
    			)
    	);
    }
    
  • для платежных систем:
    function myPayFunction()
    {
    	return new \Bitrix\Main\EventResult(
    		\Bitrix\Main\EventResult::SUCCESS,
    		array(
    			'\MyPayRestriction' => '/bitrix/php_interface/include/mypayrestriction.php',
    		)
    	);
    }
    
  • для касс:
    function myCashboxFunction()
    {
    	return new \Bitrix\Main\EventResult(
    		\Bitrix\Main\EventResult::SUCCESS,
    		array(
    			'\MyCashboxRestriction' => '/bitrix/php_interface/include/mycashboxrestriction.php',
    		)
    	);
    }
    
  • для компаний:
    function myCompanyFunction()
    {
    	return new \Bitrix\Main\EventResult(
    		\Bitrix\Main\EventResult::SUCCESS,
    		array(
    			'\MyCompanyRestriction' => '/bitrix/php_interface/include/mycompanyrestriction.php',
    		)
    	);
    }
    

Далее, описывая ограничение, вы можете вводить какие-то собственные правила. Например, в примере ниже приведено ограничение доступности службы доставки по лунным суткам:

use Bitrix\Sale\Delivery\Restrictions;
use Bitrix\Sale\Internals\Entity;

class MyDeliveryRestriction extends Restrictions\Base
{
	public static function getClassTitle()
	{
		return 'по лунным суткам';
	}

	public static function getClassDescription()
	{
		return 'доставка будет выводится только в указанном диапазоне лунных суток';
	}

public static function check($moonday, array $restrictionParams, $deliveryId = 0)
{
	if ($moonday < $restrictionParams['MIN_MOONDAY'] || $moonday > $restrictionParams['MAX_MOONDAY'])
		return false;

	return true;
}
protected static function extractParams(Entity $shipment)
{
	$json = file_get_contents('http://moon-today.com/api/index.php?get=moonday');
	$res = json_decode($json, true);
	return !empty($res['moonday']) ? intval($res['moonday']) : 0;
}
public static function getParamsStructure($entityId = 0)
	{
		return array(
			"MIN_MOONDAY" => array(
				'TYPE' => 'NUMBER',
				'DEFAULT' => "1",
				'LABEL' => 'Минимальные сутки'
			),
			"MAX_MOONDAY" => array(
				'TYPE' => 'NUMBER',
				'DEFAULT' => "30",
				'LABEL' => 'Максимальные сутки'
			)
		);
	}
}


24
Курсы разработаны в компании «1С-Битрикс»